# coding=utf-8
# 法院公告实体解析

import json
import sys
import traceback
sys.path.append('../')
sys.path.append('../../')

import copy
from i_entity_extractor.extractors.default.default_extractor import DefaultExtractor
from i_entity_extractor.common_parser_lib import toolsutil


class FyggExtractor(DefaultExtractor):
    def __init__(self, topic_info, log):
        DefaultExtractor.__init__(self, topic_info, log)
        self.litiants_seps = [',', ':', '，', '：', '。', '、', ";", "；", '\t']

    def entity_extract(self, parse_info, extract_data):
        '''法院公告实体解析入口'''
        extract_info = parse_info.extract_info
        url = parse_info.base_info.url
        self.log.info("fygg_start_parse\turl:%s\ttopic_id:%s" % (url, extract_info.topic_id))

        entity_data = self.format_extract_data(extract_data)

        return entity_data

    def format_extract_data(self, extract_data):
        '''实体解析入口'''
        entity_data = copy.deepcopy(extract_data)
        province = None
        if entity_data.has_key("court"):
            court    = extract_data.get('court')
            province = self.parser_tool.province_parser.get_province(court)

        defendants = extract_data.get("defendants","")
        plaintiffs = extract_data.get("plaintiffs","")
        defendant_list = []
        plaintiff_list = []

        if defendants and plaintiffs:
            plaintiff_list = toolsutil.my_split(plaintiffs,self.litiants_seps)
            defendant_list = toolsutil.my_split(defendants, self.litiants_seps)


        info = {}
        if entity_data.has_key("bulletin_content"):
            content        = extract_data.get('bulletin_content')
            case_cause     = self.parser_tool.case_cause_parser.get_case_cause(content)
            case_id        = self.parser_tool.caseid_parser.get_case_id(content)
            info           = self.parser_tool.fygg_parser.do_parser(content)
            info["case_cause"] = case_cause
            info["case_id"]    = case_id

        if defendant_list == [] and plaintiff_list == []:
            defendant_list = info.get("defendant_list",[])
            plaintiff_list = info.get("plaintiff_list", [])

        case_id = info.get("case_id","")
        litigant_list = list(set(plaintiff_list + defendant_list))
        litigants     = ','.join(litigant_list)

        entity_data["norm_bulletin_content"] = info.get("norm_content")
        entity_data["case_id"]        = info.get("case_id")
        entity_data["case_cause"]     = info.get("case_cause")
        entity_data["entity_list"]    = info.get("entities")
        entity_data["plaintiff_list"] = plaintiff_list
        entity_data["defendant_list"] = defendant_list
        entity_data["bulletin_type"]  = info.get("bulletin_type")
        entity_data["litigant_list"]  = litigant_list
        entity_data["litigants"]      = litigants

        return entity_data




if __name__ == '__main__':
    import pytoml
    import sys
    import time
    begin_time = time.time()
    sys.path.append('../../')
    from conf import get_config
    from bdp.i_crawler.i_extractor.ttypes import BaseInfo, ExtractInfo, PageParseInfo

    with open('../../entity.toml', 'rb') as config:
        config = pytoml.load(config)
    conf = get_config(config)
    import common

    topic_id = 33
    from entity_extractor_route import EntityExtractorRoute

    route = EntityExtractorRoute()
    topic_info = route.all_topics.get(topic_id, None)
    obj = FyggExtractor(topic_info, common.log)

    mongo_conf = {
        'host': '172.16.215.2',
        'port': 40042,
        'final_db': 'final_data',
        'username': "readme",
        'password': "readme",
    }
    from i_entity_extractor.common_parser_lib.mongo import MongDb
    db = MongDb(mongo_conf['host'], mongo_conf['port'], mongo_conf['final_db'],
                mongo_conf['username'],
                mongo_conf['password'])

    result = db.select('bulletin', {}).skip(50)
    num    = 0

    for item in result:
        extract_data = {
    "_site_record_id": "http://rmfygg.court.gov.cn/bulletin/court/2016/10/20/block4997890.html",
    "bulletin_content": "起诉状副本及开庭传票\t\t海南世知旅游有限公司\t\t\t\t(2014)佛中法民二初字第167-3号,佛山市顺德区即达珠宝金行有限公司、佛山市顺德区万辉珠宝首饰有限公司、佛山市顺德区雅特利珠宝首饰有限公司、陈团和、王志明、雷静娴、陈伟坚、麦连云、殷佩丽：本院受理原告中国工商银行股份有限公司佛山北滘支行诉被告佛山市顺德区即达珠宝金行有限公司、佛山市顺德区万辉珠宝首饰有限公司、佛山市顺德区雅特利珠宝首饰有限公司、陈团和、王志明、雷静娴、陈伟坚、麦连云、殷佩丽金融借款合同纠纷一案，因以法律规定的其他方式无法向你们送达，依照《中华人民共和国民事诉讼法》第九十二条的规定，向你们公告送达变更及增加诉讼请求申请书、应诉通知书、举证通知书。变更及增加诉讼请求申请书，申请事项：1、增加请求法院判决被告佛山市顺德区万辉珠宝首饰有限公司、佛山市顺德区雅特利珠宝首饰有限公司、陈团和、王志明、雷静娴对被告佛山市顺德区即达珠宝金行有限公司拖欠原告的债务承担连带清偿责任；2、变更第二项诉讼请求为：请求判决被告佛山市顺德区即达珠宝金行有限公司向原告归还借款本金合计7605225.48元及至清偿日止的利息（利息暂计至2016年5月13日为3391097.10元，从2016年5月14日起至判决确定付款日止的利息按年利率9.9%计收，并对未按期支付的利息按年利率9.9%计收复利）；3、第五项诉讼请求变更为：请求法院判令本案的诉讼费用由上述九被告承担；4、撤回第一项、第三项、第四项诉讼请求。,佛山市顺德区即达珠宝金行有限公司、佛山市顺德区万辉珠宝首饰有限公司、佛山市顺德区雅特利珠宝首饰有限公司、陈团和、陈伟坚、麦连云提出答辩状的期限为公告送达期满后的十五日内；王志明、雷静娴、殷佩丽提出答辩状的期限为公告送达期满后的三十日内，逾期不答辩，应承担相应的不利后果。举证期限为公告送达期满后的三十日内。本案定于2016年11月1日14时30分在本院第十二审判庭公开开庭审理，逾期不到庭，本院将依法缺席裁判。佛山市顺德区即达珠宝金行有限公司、佛山市顺德区万辉珠宝首饰有限公司、佛山市顺德区雅特利珠宝首饰有限公司、陈团和、陈伟坚、麦连云自本公告发出之日起满六十日，王志明、雷静娴、殷佩丽自本公告发出之日起满三个月，即视为送达。,[广东]广东省佛山市中级人民法院",
    "bulletin_date": "2016/10/20/block4997890.html",
    "pdf": "http://rmfygg.court.gov.cn/psca/lgnot/bulletin/download/4997890.pdf",
    "url": "http://rmfygg.court.gov.cn/bulletin/court/2016/10/20/block4997890.html"
}

        num += 1
        src_url = ""
        data         = json.dumps(extract_data)
        extract_info = ExtractInfo(ex_status=2, extract_data=data)
        base_info    = BaseInfo(url=src_url)
        parser_info  = PageParseInfo(base_info=base_info, extract_info=extract_info)
        entity_data  = obj.entity_extract(parser_info, extract_data)
        entity_data  = obj.after_extract(src_url, entity_data, extract_data)
        # print "-----------------------------------"
        for key, value in entity_data.items():
            if isinstance(value, list):
                for i in value:
                    print key, ":", i
            elif isinstance(value, dict):
                for key2, value2 in value.items():
                    print key2, ":", value2
            else:
                print key, ":", value
        if num%2 == 0:
            break


    print time.time() - begin_time
